package cn.com.HiSting1990.MyCompany;

public class MySingleton {

    //这个是饿汉式，在类加载的时候就实例化了
    private static MySingleton mySingleton = new MySingleton();

    private MySingleton(){}

    public static MySingleton getInstance(){
        return mySingleton;
    }
    public void show(){
        System.out.println("这个是单例设计模式--线程安全的饿汉式");
    }
}

//这个是懒汉式 线程不安全写法，在主动调用的时候才去实例化，但是这样的是线程不安全的，在多线程的时候也不能使用的
class MySingleton1{
    private static MySingleton1 singleton;

    private MySingleton1(){}

    public static MySingleton1 getInstance(){
        if (singleton==null){
            singleton = new MySingleton1();
        }
        return singleton;
    }
    public void show(){
        System.out.println("这个是单例设计模式--线程不安全的懒汉式");
    }
}

//这个是线程安全的懒汉式写法，主动调用的时候实例化，并且线程是安全的，但是它的性能会受到很大的影响
class MySingleton2{
    private static MySingleton2 singleton;
    private MySingleton2 (){}
    public static synchronized MySingleton2 getInstance(){
        if (singleton == null){
            singleton = new MySingleton2();
        }
        return singleton;
    }
    public void show(){
        System.out.println("这个是单例设计模式--线程安全的懒汉式");
    }
}

